atlantis.c revision 9682c8870b8ff5e4ac2e4c70b759f791c6f38c1f
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* Copyright (c) Mark J. Kilgard, 1994. */
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/**
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * ALL RIGHTS RESERVED
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Permission to use, copy, modify, and distribute this software for
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * any purpose and without fee is hereby granted, provided that the above
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * copyright notice appear in all copies and that both the copyright notice
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * and this permission notice appear in supporting documentation, and that
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * the name of Silicon Graphics, Inc. not be used in advertising
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * or publicity pertaining to distribution of the software without specific,
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * written prior permission.
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * US Government Users Restricted Rights
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Use, duplication, or disclosure by the Government is subject to
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * (c)(1)(ii) of the Rights in Technical Data and Computer Software
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * clause at DFARS 252.227-7013 and/or in similar or successor
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * clauses in the FAR or the DOD or NASA FAR Supplement.
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Unpublished-- rights reserved under the copyright laws of the
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * United States.  Contractor/manufacturer is Silicon Graphics,
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <stdio.h>
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <stdlib.h>
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string.h>
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <math.h>
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <sys/time.h>
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <GLUT/glut.h>
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "atlantis.h"
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec sharks[NUM_SHARKS];
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec momWhale;
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec babyWhale;
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec dolph;
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLboolean Timing = GL_TRUE;
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int w_win = 640;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int h_win = 480;
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLint count  = 0;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLenum StrMode = GL_VENDOR;
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLboolean moving;
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static double mtime(void)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   struct timeval tk_time;
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   struct timezone tz;
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   gettimeofday(&tk_time, &tz);
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   return 4294.967296 * tk_time.tv_sec + 0.000001 * tk_time.tv_usec;
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static double filter(double in, double *save)
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static double k1 = 0.9;
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static double k2 = 0.05;
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	save[3] = in;
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	save[1] = save[0]*k1 + k2*(save[3] + save[2]);
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	save[0]=save[1];
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	save[2]=save[3];
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	return(save[1]);
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DrawStr(const char *str)
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	GLint i = 0;
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	if(!str) return;
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	while(str[i])
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	{
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		i++;
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	}
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)InitFishs(void)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int i;
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for (i = 0; i < NUM_SHARKS; i++) {
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sharks[i].x = 70000.0 + rand() % 6000;
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sharks[i].y = rand() % 6000;
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sharks[i].z = rand() % 6000;
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sharks[i].psi = rand() % 360 - 180.0;
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sharks[i].v = 1.0;
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    dolph.x = 30000.0;
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    dolph.y = 0.0;
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    dolph.z = 6000.0;
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    dolph.psi = 90.0;
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    dolph.theta = 0.0;
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    dolph.v = 3.0;
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.x = 70000.0;
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.y = 0.0;
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.z = 0.0;
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.psi = 90.0;
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.theta = 0.0;
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.v = 3.0;
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.x = 60000.0;
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.y = -2000.0;
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.z = -2000.0;
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.psi = 90.0;
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.theta = 0.0;
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.v = 3.0;
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Init(void)
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float ambient[] = {0.2, 0.2, 0.2, 1.0};
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float diffuse[] = {1.0, 1.0, 1.0, 1.0};
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float position[] = {0.0, 1.0, 0.0, 0.0};
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float mat_shininess[] = {90.0};
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float mat_specular[] = {0.8, 0.8, 0.8, 1.0};
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0};
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float mat_ambient[] = {0.3, 0.4, 0.5, 1.0};
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0};
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float lmodel_localviewer[] = {0.0};
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    //GLfloat map1[4] = {0.0, 0.0, 0.0, 0.0};
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    //GLfloat map2[4] = {0.0, 0.0, 0.0, 0.0};
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static float fog_color[] = {0.0, 0.5, 0.9, 1.0};
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glFrontFace(GL_CCW);
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glDepthFunc(GL_LESS);
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glEnable(GL_DEPTH_TEST);
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glLightfv(GL_LIGHT0, GL_POSITION, position);
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer);
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glEnable(GL_LIGHTING);
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glEnable(GL_LIGHT0);
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    InitFishs();
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glEnable(GL_FOG);
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glFogi(GL_FOG_MODE, GL_EXP);
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glFogf(GL_FOG_DENSITY, 0.0000025);
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glFogfv(GL_FOG_COLOR, fog_color);
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glClearColor(0.0, 0.5, 0.9, 1.0);
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Reshape(int width, int height)
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	w_win = width;
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	h_win = height;
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glViewport(0, 0, width, height);
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glMatrixMode(GL_PROJECTION);
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glLoadIdentity();
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    gluPerspective(60.0, (GLfloat) width / (GLfloat) height, 20000.0, 300000.0);
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glMatrixMode(GL_MODELVIEW);
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Animate(void)
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int i;
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for (i = 0; i < NUM_SHARKS; i++) {
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        SharkPilot(&sharks[i]);
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        SharkMiss(i);
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    WhalePilot(&dolph);
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    dolph.phi++;
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    //glutPostRedisplay();
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    WhalePilot(&momWhale);
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    momWhale.phi++;
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    WhalePilot(&babyWhale);
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    babyWhale.phi++;
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Key(unsigned char key, int x, int y)
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    switch (key) {
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 't':
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    	Timing = !Timing;
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    break;
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case ' ':
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    	switch(StrMode)
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    	{
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    case GL_EXTENSIONS:
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    			StrMode = GL_VENDOR;
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    break;
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    case GL_VENDOR:
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    	StrMode = GL_RENDERER;
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    break;
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    case GL_RENDERER:
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    	StrMode = GL_VERSION;
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    break;
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    case GL_VERSION:
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    	StrMode = GL_EXTENSIONS;
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		    break;
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		}
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	break;
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 27:           /* Esc will quit */
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        exit(1);
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    break;
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 's':             		/* "s" start animation */
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        moving = GL_TRUE;
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        //glutIdleFunc(Animate);
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    break;
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 'a':          			/* "a" stop animation */
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        moving = GL_FALSE;
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        //glutIdleFunc(NULL);
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    break;
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case '.':          			/* "." will advance frame */
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!moving) {
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Atlantis_Animate();
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/*
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void Display(void)
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static float P123[3] = {-448.94, -203.14, 9499.60};
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static float P124[3] = {-442.64, -185.20, 9528.07};
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static float P125[3] = {-441.07, -148.05, 9528.07};
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static float P126[3] = {-443.43, -128.84, 9499.60};
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static float P127[3] = {-456.87, -146.78, 9466.67};
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static float P128[3] = {-453.68, -183.93, 9466.67};
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glPushMatrix();
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FishTransform(&dolph);
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DrawDolphin(&dolph);
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPopMatrix();
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glutSwapBuffers();
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)*/
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Display(void)
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int i;
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static double th[4] = {0.0, 0.0, 0.0, 0.0};
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	static double t1 = 0.0, t2 = 0.0, t;
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	char num_str[128];
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    t1 = t2;
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for (i = 0; i < NUM_SHARKS; i++) {
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        glPushMatrix();
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        FishTransform(&sharks[i]);
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        DrawShark(&sharks[i]);
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        glPopMatrix();
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPushMatrix();
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FishTransform(&dolph);
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DrawDolphin(&dolph);
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPopMatrix();
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPushMatrix();
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FishTransform(&momWhale);
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DrawWhale(&momWhale);
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPopMatrix();
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPushMatrix();
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FishTransform(&babyWhale);
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glScalef(0.45, 0.45, 0.3);
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DrawWhale(&babyWhale);
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glPopMatrix();
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if(Timing)
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		t2 = mtime();
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		t = t2 - t1;
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		if(t > 0.0001) t = 1.0 / t;
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glDisable(GL_LIGHTING);
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		//glDisable(GL_DEPTH_TEST);
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glColor3f(1.0, 0.0, 0.0);
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glMatrixMode (GL_PROJECTION);
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glPushMatrix();
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glLoadIdentity();
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glOrtho(0, w_win, 0, h_win, -10.0, 10.0);
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glRasterPos2f(5.0, 5.0);
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		switch(StrMode)
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		{
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			case GL_VENDOR:
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				sprintf(num_str, "%0.2f Hz, %dx%d, VENDOR: ", filter(t, th), w_win, h_win);
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(num_str);
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(glGetString(GL_VENDOR));
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			break;
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			case GL_RENDERER:
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				sprintf(num_str, "%0.2f Hz, %dx%d, RENDERER: ", filter(t, th), w_win, h_win);
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(num_str);
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(glGetString(GL_RENDERER));
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			break;
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			case GL_VERSION:
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				sprintf(num_str, "%0.2f Hz, %dx%d, VERSION: ", filter(t, th), w_win, h_win);
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(num_str);
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(glGetString(GL_VERSION));
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			break;
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			case GL_EXTENSIONS:
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				sprintf(num_str, "%0.2f Hz, %dx%d, EXTENSIONS: ", filter(t, th), w_win, h_win);
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(num_str);
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)				DrawStr(glGetString(GL_EXTENSIONS));
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			break;
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		}
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glPopMatrix();
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glMatrixMode(GL_MODELVIEW);
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		glEnable(GL_LIGHTING);
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		//glEnable(GL_DEPTH_TEST);
3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	}
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    count++;
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutSwapBuffers();
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/*
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Visible(int state)
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (state == GLUT_VISIBLE) {
3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (moving)
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            glutIdleFunc(Animate);
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (moving)
3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            glutIdleFunc(NULL);
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)timingSelect(int value)
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    switch(value)
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		case 1:
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			StrMode = GL_VENDOR;
3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		break;
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		case 2:
3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			StrMode = GL_RENDERER;
3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		break;
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		case 3:
3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			StrMode = GL_VERSION;
3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		break;
3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		case 4:
3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci			StrMode = GL_EXTENSIONS;
3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci		break;
3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void
3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TuccimenuSelect(int value)
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    switch (value) {
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 1:
4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        moving = GL_TRUE;
4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        glutIdleFunc(Animate);
4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        break;
4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 2:
4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        moving = GL_FALSE;
4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        glutIdleFunc(NULL);
4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        break;
4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case 4:
4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        exit(0);
4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        break;
4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int
4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)main(int argc, char **argv)
4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	GLboolean fullscreen = GL_FALSE;
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	GLint time_menu;
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 	srand(0);
4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        glutInit(&argc, argv);
4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	if (argc > 1 && !strcmp(argv[1], "-w"))
4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		fullscreen = GL_FALSE;
4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	//glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	glutInitDisplayString("rgba double depth=24");
4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	if (fullscreen) {
4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	  glutGameModeString("1024x768:32");
4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	  glutEnterGameMode();
4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	} else {
4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	  glutInitWindowSize(320, 240);
4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	  glutCreateWindow("Atlantis Timing");
4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	}
4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Init();
4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutDisplayFunc(Display);
4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutReshapeFunc(Reshape);
4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutKeyboardFunc(Key);
4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    moving = GL_TRUE;
4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)glutIdleFunc(Animate);
4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutVisibilityFunc(Visible);
4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    time_menu = glutCreateMenu(timingSelect);
4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("GL_VENDOR", 1);
4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("GL_RENDERER", 2);
4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("GL_VERSION", 3);
4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("GL_EXTENSIONS", 4);
4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutCreateMenu(menuSelect);
4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("Start motion", 1);
4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("Stop motion", 2);
4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddSubMenu("Timing Mode", time_menu);
4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAddMenuEntry("Quit", 4);
4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    //glutAttachMenu(GLUT_RIGHT_BUTTON);
4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutAttachMenu(GLUT_RIGHT_BUTTON);
4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    glutMainLoop();
4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;             // ANSI C requires main to return int.
4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)*/